import { PageOptions } from '@graphcommerce/framer-next-pages' import { getProductStaticPaths, jsonLdProduct, jsonLdProductOffer, ProductAddToCart, productPageCategory, ProductPageGallery, ProductPageMeta, ProductSidebarDelivery, } from '@graphcommerce/magento-product' import { BundleItemsForm, BundleProductPageDocument, BundleProductPageQuery, } from '@graphcommerce/magento-product-bundle' import { jsonLdProductReview, ProductReviewChip } from '@graphcommerce/magento-review' import { StoreConfigDocument } from '@graphcommerce/magento-store' import { GetStaticProps, JsonLd, Title } from '@graphcommerce/next-ui' import { Typography } from '@material-ui/core' import { GetStaticPaths } from 'next' import React from 'react' import { Product } from 'schema-dts' import FullPageShell, { FullPageShellProps } from '../../../components/AppShell/FullPageShell' import FullPageShellHeader from '../../../components/AppShell/FullPageShellHeader' import { ProductPageDocument, ProductPageQuery } from '../../../components/GraphQL/ProductPage.gql' import ProductUsps from '../../../components/ProductUsps' import ProductpagesContent from '../../../components/ProductpagesContent' import RowProductDescription from '../../../components/Row/RowProductDescription' import RowProductFeature from '../../../components/Row/RowProductFeature' import RowProductFeatureBoxed from '../../../components/Row/RowProductFeatureBoxed' import RowProductRelated from '../../../components/Row/RowProductRelated' import RowProductReviews from '../../../components/Row/RowProductReviews' import RowProductSpecs from '../../../components/Row/RowProductSpecs' import RowProductUpsells from '../../../components/Row/RowProductUpsells' import apolloClient from '../../../lib/apolloClient' export const config = { unstable_JsPreload: false } type Props = ProductPageQuery & BundleProductPageQuery & Pick type RouteProps = { url: string } type GetPageStaticPaths = GetStaticPaths type GetPageStaticProps = GetStaticProps function ProductBundle(props: Props) { const { products, usps, typeProducts, sidebarUsps, productpages, backFallbackHref, backFallbackTitle, } = props const product = products?.items?.[0] const typeProduct = typeProducts?.items?.[0] const aggregations = typeProducts?.aggregations if (product?.__typename !== 'BundleProduct' || typeProduct?.__typename !== 'BundleProduct') return
return ( <> {product.name} item={{ '@context': 'https://schema.org', ...jsonLdProduct(product), ...jsonLdProductOffer(product), ...jsonLdProductReview(product), }} /> {product.name} } /> , RowProductFeatureBoxed: (rowProps) => ( ), RowProductSpecs: (rowProps) => ( ), RowProductReviews: (rowProps) => , RowProductRelated: (rowProps) => , RowProductUpsells: (rowProps) => , }} content={productpages?.[0].content} /> ) } ProductBundle.pageOptions = { SharedComponent: FullPageShell, } as PageOptions export default ProductBundle export const getStaticPaths: GetPageStaticPaths = async ({ locales = [] }) => { if (process.env.NODE_ENV === 'development') return { paths: [], fallback: 'blocking' } const path = (locale: string) => getProductStaticPaths(apolloClient(locale), locale, 'BundleProduct') const paths = (await Promise.all(locales.map(path))).flat(1) return { paths, fallback: 'blocking' } } export const getStaticProps: GetPageStaticProps = async ({ params, locale }) => { const client = apolloClient(locale, true) const staticClient = apolloClient(locale) const urlKey = params?.url ?? '??' const productUrls = [`product/${urlKey}`, 'product/global'] const conf = client.query({ query: StoreConfigDocument }) const productPage = staticClient.query({ query: ProductPageDocument, variables: { urlKey, productUrls, rootCategory: (await conf).data.storeConfig?.root_category_uid ?? '', }, }) const typeProductPage = staticClient.query({ query: BundleProductPageDocument, variables: { urlKey }, }) if ( (await productPage).data.products?.items?.[0]?.__typename !== 'BundleProduct' || (await typeProductPage).data.typeProducts?.items?.[0]?.__typename !== 'BundleProduct' ) { return { notFound: true } } const category = productPageCategory((await productPage).data?.products?.items?.[0]) return { props: { ...(await productPage).data, ...(await typeProductPage).data, apolloState: await conf.then(() => client.cache.extract()), backFallbackHref: category?.url_path ? `/${category?.url_path}` : null, backFallbackTitle: category?.name ?? null, }, revalidate: 60 * 20, } }